<?php

class ColorController extends Controller
{
  /**
   * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
   * using two-column layout. See 'protected/views/layouts/column2.php'.
   */
  public $layout='//layouts/column2';

  /**
   * @return array action filters
   */
  public function filters()
  {
    return array(
			'accessControl', // perform access control for CRUD operations
			'postOnly + delete', // we only allow deletion via POST request
    );
  }

  /**
   * Specifies the access control rules.
   * This method is used by the 'accessControl' filter.
   * @return array access control rules
   */
  public function accessRules()
  {
    return array(
    array('allow',  // allow all users to perform 'index' and 'view' actions
				'actions'=>array('index','view'),
				'users'=>array('*'),
    ),
    array('allow', // allow authenticated user to perform 'create' and 'update' actions
				'actions'=>array('create','update'),
				'users'=>array('@'),
    ),
    array('allow', // allow admin user to perform 'admin' and 'delete' actions
				'actions'=>array('admin','delete'),
				'users'=>array('admin'),
    ),
    array('deny',  // deny all users
				'users'=>array('*'),
    ),
    );
  }

  /**
   * Displays a particular model.
   * @param integer $id the ID of the model to be displayed
   */
  public function actionView($id)
  {
    $this->render('view',array(
			'model'=>$this->loadModel($id),
    ));
  }

  /**
   * Creates a new model.
   * If creation is successful, the browser will be redirected to the 'view' page.
   */
  public function actionCreate()
  {
    $model = new Color;
    $model->enabled = 1;

    if(isset($_POST['Color']))
    {
      $model->attributes = $_POST['Color'];
      
      $transaction = Yii::app()->db->beginTransaction();
      
      try {
        if($model->validate()) {
          $model->name2 = ($_POST['Color']['name2'] != '') ? $_POST['Color']['name2'] : '{translate}';
          $model->save();
          foreach (array('vi','en') as $item) {
            $lang = new ColorLang();
            $lang->colorID = $model->id;
            $lang->name = ($item == 'vi') ? $model->name : $model->name2;
            $lang->languageID = $item;
            $lang->save();
          }
          $transaction->commit();
          $this->redirect(array('view','id'=>$model->id));
        }
      } catch (Exception $e) {
        $transaction->rollBack();
      }
    }

    $this->render('create',array(
			'model'=>$model, 
    ));
  }

  /**
   * Updates a particular model.
   * If update is successful, the browser will be redirected to the 'view' page.
   * @param integer $id the ID of the model to be updated
   */
  public function actionUpdate($id)
  {
    $model = $this->loadModel($id);
    $vn = $this->loadModelLang($id, 'vi');
    $en = $this->loadModelLang($id, 'en');
    $model->name = $vn->name;
    $model->name2 = $en->name;

    if(isset($_POST['Color']))
    {
      $model->attributes = $_POST['Color'];
      
      $transaction = Yii::app()->db->beginTransaction();
      
      try {
        if($model->validate()) {
          $model->name2 = ($_POST['Color']['name2'] != '') ? $_POST['Color']['name2'] : $model->name2;
          $model->save();
          $vn->name = $model->name;
          $vn->update();
          $en->name = $model->name2;
          $en->update();
          $transaction->commit();
          $this->redirect(array('view','id'=>$model->id));
        }
      } catch (Exception $e) {
        $transaction->rollBack();
      }
    }

    $this->render('update',array(
			'model'=>$model, 
    ));
  }

  /**
   * Deletes a particular model.
   * If deletion is successful, the browser will be redirected to the 'admin' page.
   * @param integer $id the ID of the model to be deleted
   */
  public function actionDelete($id)
  {
    $model = $this->loadModel($id);
    $model->deleted = 1;
    $model->update();

    // if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
    if(!isset($_GET['ajax']))
    $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('index'));
  }

  /**
   * Manages all models.
   */
  public function actionIndex()
  {
    $model=new Color('search');
    $model->unsetAttributes();  // clear any default values
    if(isset($_GET['Color']))
    $model->attributes=$_GET['Color'];

    $this->render('index',array(
			'model'=>$model,
    ));
  }

  /**
   * Returns the data model based on the primary key given in the GET variable.
   * If the data model is not found, an HTTP exception will be raised.
   * @param integer $id the ID of the model to be loaded
   * @return Color the loaded model
   * @throws CHttpException
   */
  public function loadModel($id)
  {
    $model = Color::model()->findByAttributes(array('id' => $id, 'deleted' => 0));
    if($model === null)
    throw new CHttpException(404,'The requested page does not exist.');
    return $model;
  }

  public function loadModelLang($id, $lang)
  {
    $model = ColorLang::model()->findByAttributes(array('colorID' => $id, 'languageID' => $lang));
    if($model===null)
    $model = new ColorLang();
    return $model;
  }
  /**
   * Performs the AJAX validation.
   * @param Color $model the model to be validated
   */
  protected function performAjaxValidation($model)
  {
    if(isset($_POST['ajax']) && $_POST['ajax']==='color-form')
    {
      echo CActiveForm::validate($model);
      Yii::app()->end();
    }
  }
}
